package com.molichuxing.gateway.bff.stock.services;

import java.util.List;
import java.util.Map;

import com.molichuxing.framework.dto.Paged;
import com.molichuxing.gateway.bff.stock.entity.request.modify.StockCarModifyVo;
import com.molichuxing.gateway.bff.stock.entity.response.EntrepotStorageVo;
import com.molichuxing.gateway.bff.stock.entity.response.FenceBaseVo;
import com.molichuxing.gateway.bff.stock.entity.response.StockCarDetailVo;
import com.molichuxing.gateway.bff.stock.entity.response.StockCarVo;
import com.molichuxing.gateway.bff.stock.entity.response.StockRecordBaseVo;

/**
 * 
 * @author liyg
 * 库存车辆bff服务
 * 2019-09-07
 *
 */
public interface StockCarBffService {

	/**
	 *库存车辆列表
	 * @param map 参数
	 *key:vin            String    车架号 非必填
	 *key:licencePlate   String    车牌号 非必填
	 *key:vehicleId  Integer 车型id 非必填
	 *key:vehicleType  Integer 车辆类型 非必填
	 *key:dealerId   Integer 经销商id 
	 *key:storeId    Integer 门店id 非必填
	 *key:sortName   String 排序字段 
	 *key:sortWay    String 排序方式 
	 *key:pageNum    Integer 当前页
	 *key:pageSize   Integer 每页显示条数
	 * @return
	 * @throws Exception 
	 */
	Paged<StockCarVo> getStockCarList(Map<String,Object> map)throws Exception;
	
	/**
	 *到期还车列表（待还车 和 回库中）
	 * @param map 参数
	 *key:tabType       Integer    tab类型
	 *key:vin            String    车架号 非必填
	 *key:licencePlate   String    车牌号 非必填
	 *key:dealerId   Integer 经销商id 
	 *key:sortName   String 排序字段 
	 *key:sortWay    String 排序方式 
	 *key:pageNum    Integer 当前页
	 *key:pageSize   Integer 每页显示条数
	 * @return
	 * @throws Exception 
	 */
	Paged<StockCarDetailVo> getReturnList(Map<String,Object> map)throws Exception;
	
	/**
	 *到期还车列表（已回库）
	 * @param map 参数
	 *key:tabType       Integer    tab类型
	 *key:vin            String    车架号 非必填
	 *key:licencePlate   String    车牌号 非必填
	 *key:dealerId   Integer 经销商id 
	 *key:sortName   String 排序字段 
	 *key:sortWay    String 排序方式 
	 *key:pageNum    Integer 当前页
	 *key:pageSize   Integer 每页显示条数
	 * @return
	 * @throws Exception 
	 */
	Paged<StockCarDetailVo> getReturnRecordList(Map<String,Object> map)throws Exception;

	/**
	 * 获取库存车辆详情
	 * @param carId
	 * @return
	 * @throws Exception
	 */
	StockCarVo getStockCar(Integer carId) throws Exception;
	
	/**
	 * 车辆调拨
	 * @param modifyVo
	 * @return
	 * @throws Exception
	 */
	Boolean modifyAllot(StockCarModifyVo modifyVo) throws Exception;
	
	/**
	 * 还车
	 * @param modifyVo
	 * @return
	 * @throws Exception
	 */
	Boolean modifyReturn(StockCarModifyVo modifyVo) throws Exception;
	
	/**
	 * 获取中转库列表
	 * @return
	 */
	List<EntrepotStorageVo> getEntrepotStorageList();
	
	/**
	 * 根据车辆id获取库存历史流转记录
	 * @param carId
	 * @return
	 * @throws Exception 
	 */
	List<StockRecordBaseVo> getListByCarId(Integer carId);

	/**
	 * 根据门店或者中转库查 围栏数据信息
	 * @param map
	 * @return
	 */
	List<FenceBaseVo> getEntrepotOrStoreFence(Map<String, Object> map);
}
